﻿using ControlHelper.Attributes;
using Creator.Core.Base;
using Newtonsoft.Json;
using System;

namespace Creator.Core.Component
{
    /// <summary>
    /// 组件接口
    /// </summary>
    public abstract class IComponent : Behaviour
    {
        protected IComponent(BaseObject baseObject) : base(baseObject)
        {

        }

        /// <summary> 
        /// 组件初始化，初始化顺序，从上往下
        /// <para>继承于<see cref=" LogicComponet"/>的组件初始化</para> 
        /// <para>继承于<see cref=" RenderComponent"/>的组件初始化</para> 
        /// </summary>
        public override void Init()
        {
            base.Init();
        }

        [Hide]
        [JsonIgnore]
        public virtual bool StartOnEditor { get; }

        /// <summary>
        /// 当初始化的时候发生，如果组件未实现则不发生
        /// <para>
        /// 第一个参数：发送的组件
        /// 第二个参数：数据</para> 
        /// </summary> 
        public virtual event  Action<object, object> OnInit;
        /// <summary>
        /// 当编辑界面点击时发生，如果组件未实现则不发生
        /// <para>
        /// 第一个参数：发送的组件
        /// 第二个参数：数据</para> 
        /// </summary> 
        public virtual event Action<object, object> OnEditorEvent;

        /// <summary>
        /// 当正在运行时发生，如果组件未实现则不发生
        /// <para>
        /// 第一个参数：发送的组件
        /// 第二个参数：数据
        /// 第二个参数：增量时间
        /// </para> 
        /// </summary> 
        public virtual event Action<object,object, double> OnRun;

        /// <summary>
        /// 当选择对应行为发生，如果组件未实现则不发生
        /// <para>
        /// 第一个参数：发送的组件
        /// 第二个参数：需要的组件类型
        /// 第三个参数：返回值对应的组件
        /// </para>  
        /// </summary>  
        public virtual event Func<object, Type, IComponent> OnBehaviourClick;
    }
}
